#include "modbusmanage.h"

ModbusManage::ModbusManage()
{
    ModbusInit();

    Timer_Read_QR = new QTimer(this);
    connect(Timer_Read_QR,&QTimer::timeout,this,&ModbusManage::ModbusManageTimer_Read_QR);
    Timer_Read_QR->start(200);

    Timer_Read_QC = new QTimer(this);
    connect(Timer_Read_QC,&QTimer::timeout,this,&ModbusManage::ModbusManageTimer_Read_QC);
    Timer_Read_QC->start(200);

    Timer_Read_RS = new QTimer(this);
    connect(Timer_Read_RS,&QTimer::timeout,this,&ModbusManage::ModbusManageTimer_Read_RS);
    Timer_Read_RS->start(200);

    Timer_Read_RX = new QTimer(this);
    connect(Timer_Read_RX,&QTimer::timeout,this,&ModbusManage::ModbusManageTimer_Read_RX);
    Timer_Read_RX->start(200);

}

void ModbusManage::ModbusInit()
{

    _Client_QR = new ModbusClient;
    _Client_QR->on_btnConnect_clicked(_Client_ip, _Port);

    _Client_QC = new ModbusClient;
    _Client_QC->on_btnConnect_clicked(_Client_ip, _Port);

    _Client_RS = new ModbusClient;
    _Client_RS->on_btnConnect_clicked(_Client_ip, _Port);

    _Client_RX = new ModbusClient;
    _Client_RX->on_btnConnect_clicked(_Client_ip, _Port);

    _QR_Write = new ModbusClient;
    _QR_Write->on_btnConnect_clicked(_Client_ip, _Port);

    _QC_Write = new ModbusClient;
    _QC_Write->on_btnConnect_clicked(_Client_ip, _Port);

    _RS_Write = new ModbusClient;
    _RS_Write->on_btnConnect_clicked(_Client_ip, _Port);

    _RX_Write = new ModbusClient;
    _RX_Write->on_btnConnect_clicked(_Client_ip, _Port);

    _Client_Write = new ModbusClient;
    _Client_Write->on_btnConnect_clicked(_Client_ip, _Port);
}

ModbusAll ModbusManage::getModbusAllData()
{
    return _AllModbusData;
}

void ModbusManage::MoubusReadCoil_QR(int address, int number)
{
    _Client_QR->on_ReadCoil(address, number);
}

void ModbusManage::MoubusReadCoil_QC(int address, int number)
{
    _Client_QC->on_ReadCoil(address, number);
}

void ModbusManage::MoubusReadCoil_RS(int address, int number)
{
    _Client_RS->on_ReadCoil(address, number);
}

void ModbusManage::MoubusReadCoil_RX(int address, int number)
{
    _Client_RX->on_ReadCoil(address, number);
}

void ModbusManage::ON_MoubusWriteCoil_QR(int address, quint16 value)
{
    _QR_Write->on_WriteCoil(address, value);
}

void ModbusManage::ON_MoubusWriteCoil_QC(int address, quint16 value)
{
    _QC_Write->on_WriteCoil(address, value);
}

void ModbusManage::ON_MoubusWriteCoil_RS(int address, quint16 value)
{
    _RS_Write->on_WriteCoil(address, value);
}

void ModbusManage::ON_MoubusWriteCoil_RX(int address, quint16 value)
{
    _RX_Write->on_WriteCoil(address, value);
}

void ModbusManage::ON_MoubusWriteCoil_Client(int address, quint16 value)
{
    _Client_Write->on_WriteCoil(address, value);
}

void ModbusManage::ModbusManageTimer_Read_QR()
{
    // 线圈数组
    QModbusDataUnit data;

    // 从 990 地址读取 60 个线圈数据
    MoubusReadCoil_QR(990, 60);

    // 获取线圈数组
    data = _Client_QR->getReadDataMap();

    // 心跳
    _last_QR = data.value(56);
    if (_AllModbusData.QR.connectStatus != _last_QR)
    {
        _AllModbusData.QR.connectStatus = _last_QR;
    }

    _AllModbusData.QR.Y10 = data.value(9);      // 入料使能
    _AllModbusData.QR.Y11 = data.value(10);     //
    _AllModbusData.QR.Y12 = data.value(11);     //
    _AllModbusData.QR.Y13 = data.value(12);     //
    _AllModbusData.QR.Y14 = data.value(13);     //
    _AllModbusData.QR.Y15 = data.value(14);     //

    _AllModbusData.QR.X10 = data.value(33);     // 入料位置
    _AllModbusData.QR.X11 = data.value(34);     // 入料平台
    _AllModbusData.QR.X12 = data.value(35);     // 履带电机
    _AllModbusData.QR.X13 = data.value(36);     // 入料外部
    _AllModbusData.QR.X14 = data.value(37);     //
    _AllModbusData.QR.X15 = data.value(38);     //
}

void ModbusManage::ModbusManageTimer_Read_QC()
{
    // 线圈数组
    QModbusDataUnit data;

    // 从 1040 地址读取 60 个线圈数据
    MoubusReadCoil_QC(1040, 60);

    // 获取线圈数组
    data = _Client_QC->getReadDataMap();

    // 心跳
    _last_QC = data.value(54);
    if (_AllModbusData.QC.connectStatus != _last_QC)
    {
        _AllModbusData.QC.connectStatus = _last_QC;
    }

    _AllModbusData.QC.Y10 = data.value(7);      // 出料使能
    _AllModbusData.QC.Y11 = data.value(8);      //
    _AllModbusData.QC.Y12 = data.value(9);      //
    _AllModbusData.QC.Y13 = data.value(10);     //
    _AllModbusData.QC.Y14 = data.value(11);     //
    _AllModbusData.QC.Y15 = data.value(12);     //

    _AllModbusData.QC.X10 = data.value(31);     // 出料位置
    _AllModbusData.QC.X11 = data.value(32);     // 出料平台
    _AllModbusData.QC.X12 = data.value(33);     // 履带电机
    _AllModbusData.QC.X13 = data.value(34);     //
    _AllModbusData.QC.X14 = data.value(35);     //
    _AllModbusData.QC.X15 = data.value(36);     //
}

void ModbusManage::ModbusManageTimer_Read_RX()
{
    // 线圈数组
    QModbusDataUnit data;

    // 从 1090 地址读取 60 个线圈数据
    MoubusReadCoil_RX(1090, 60);

    // 获取线圈数组
    data = _Client_RX->getReadDataMap();

    // 心跳
    _last_RX = data.value(52);
    if (_AllModbusData.RX.connectStatus != _last_RX)
    {
        _AllModbusData.RX.connectStatus = _last_RX;
    }

    _AllModbusData.RX.Y10 = data.value(5);      // 绿色确认
    _AllModbusData.RX.Y11 = data.value(6);      // 黄色确认
    _AllModbusData.RX.Y12 = data.value(7);      //
    _AllModbusData.RX.Y13 = data.value(8);      //
    _AllModbusData.RX.Y14 = data.value(9);      //
    _AllModbusData.RX.Y15 = data.value(10);     //

    _AllModbusData.RX.X10 = data.value(29);     //
    _AllModbusData.RX.X11 = data.value(30);     // 绿色按钮
    _AllModbusData.RX.X12 = data.value(31);     // 黄色按钮
    _AllModbusData.RX.X13 = data.value(32);     //
    _AllModbusData.RX.X14 = data.value(33);     //
    _AllModbusData.RX.X15 = data.value(34);     //
}

void ModbusManage::ModbusManageTimer_Read_RS()
{
    // 线圈数组
    QModbusDataUnit data;

    // 从 1140 地址读取 60 个线圈数据
    MoubusReadCoil_RS(1140, 60);

    // 获取线圈数组
    data = _Client_RS->getReadDataMap();

    // 心跳
    _last_RS = data.value(50);
    if (_AllModbusData.RS.connectStatus != _last_RS)
    {
        _AllModbusData.RS.connectStatus = _last_RS;
    }

    _AllModbusData.RS.Y10 = data.value(3);      // 绿色确认
    _AllModbusData.RS.Y11 = data.value(4);      // 黄色确认
    _AllModbusData.RS.Y12 = data.value(5);      //
    _AllModbusData.RS.Y13 = data.value(6);      //
    _AllModbusData.RS.Y14 = data.value(7);      //
    _AllModbusData.RS.Y15 = data.value(8);      //

    _AllModbusData.RS.X10 = data.value(27);     //
    _AllModbusData.RS.X11 = data.value(28);     // 绿色按钮
    _AllModbusData.RS.X12 = data.value(29);     // 黄色按钮
    _AllModbusData.RS.X13 = data.value(30);     //
    _AllModbusData.RS.X14 = data.value(31);     //
    _AllModbusData.RS.X15 = data.value(32);     //
}
